/**
 * 定义了工程中所有的结构体和数据类型，其他都有模块都要包含这个头文件。
 */

#ifndef _AHAMOLETT_CLANG_DATASTRUCT_TYPES_H_
#define _AHAMOLETT_CLANG_DATASTRUCT_TYPES_H_
#ifdef __cplusplus
extern "C" {
#endif

/* 为了方便移植，工程中所有模块的实现都不允许直接使用动态内存分配等功能。下面的语句包含了对本
   框架必要的数据类型的定义，若需要可以在本地实现。 */
#include <stddef.h>

/* container_of */
#ifndef container_of
#define container_of(ptr, type, member) ({  \
    unsigned long __target_ptr = (unsigned long)(ptr);  \
    __target_ptr -= (unsigned long)&(((type *)0)->member);  \
    (type *)__target_ptr;   \
})
#endif

#ifdef __cplusplus
}
#endif
#endif  // #ifndef _AHAMOLETT_CLANG_DATASTRUCT_TYPES_H_